package com.cloud.quickconfigure.thread;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池配置
 *
 * @author NiJo_H
 * @version 1.0
 * @date 2020/1/19 20:02
 */
@Configuration
public class ThreadPool {
    /**
     * corePoolSize:核心线程数
     * maximumPoolSize：线程池允许创建的最大线程数。
     * keepAliveTime：非核心线程闲置的超时时间。超过这个时间则回收。
     * TimeUnit：keepAliveTime参数的时间单位。
     * workQueue：任务队列。
     * ThreadFactory：线程工厂，用于创建线程。
     * RejectedExecutionHandler：饱和策略。
     *
     * @return
     */
    @Bean
    public ExecutorService initExecutor() {
        ExecutorService threadPoolExecutor = new ThreadPoolExecutor(5, 10,
                0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(20),
                r -> {
                    Thread thread = new Thread(r);
                    return thread;
                }, new ThreadPoolExecutor.AbortPolicy());
        return threadPoolExecutor;
    }


}

